Latviešu

Visaptveroša rokasgrāmata par Tailwind CSS drošā saraksta veidošanu, aptverot dinamisku klašu ģenerēšanu, produkcijas optimizāciju un labākās prakses.

Tailwind CSS drošā saraksta veidošana: Dinamisku klašu nosaukumu aizsardzība produkcijai

Tailwind CSS ir uz utilītām balstīts CSS ietvars, kas nodrošina plašu iepriekš definētu klašu klāstu jūsu tīmekļa lietojumprogrammu stilizēšanai. Lai gan tā uz utilītām balstītā pieeja piedāvā nepārspējamu elastību un ātrumu izstrādē, tā var arī radīt lielus CSS failus produkcijā, ja netiek pareizi pārvaldīta. Šeit noder drošā saraksta veidošana (angliski - safelisting, zināma arī kā whitelisting). Drošā saraksta veidošana ir process, kurā jūs skaidri norādāt Tailwind CSS, kurus klašu nosaukumus plānojat izmantot savā projektā, ļaujot tam būvēšanas procesā atmest visas pārējās neizmantotās klases. Tas dramatiski samazina jūsu CSS faila izmēru, nodrošinot ātrāku lapas ielādes laiku un uzlabotu veiktspēju.

Izpratne par drošā saraksta veidošanas nepieciešamību

Tailwind CSS pēc noklusējuma ģenerē tūkstošiem CSS klašu. Ja jūs iekļautu visas šīs klases savā produkcijas būvējumā, pat ja izmantojat tikai nelielu daļu no tām, jūsu CSS fails būtu nevajadzīgi liels. Tas ietekmē jūsu vietnes veiktspēju vairākos veidos:

Drošā saraksta veidošana risina šīs problēmas, selektīvi iekļaujot tikai tās klases, kuras jūs patiešām izmantojat, tādējādi iegūstot ievērojami mazāku un efektīvāku CSS failu. Mūsdienu tīmekļa izstrādes prakses prasa optimizētu un "tīru" kodu. Drošā saraksta veidošana ar Tailwind CSS nav tikai labākā prakse; tā ir nepieciešamība, lai nodrošinātu veiktspējīgas tīmekļa lietojumprogrammas.

Dinamisko klašu nosaukumu izaicinājumi

Lai gan drošā saraksta veidošana ir ļoti svarīga, tā rada izaicinājumu, ja izmantojat dinamiskus klašu nosaukumus. Dinamiski klašu nosaukumi ir tie, kas tiek ģenerēti vai modificēti izpildes laikā, bieži balstoties uz lietotāja ievadi, datiem, kas iegūti no API, vai nosacījumu loģikas jūsu JavaScript kodā. Šīs klases ir grūti paredzēt sākotnējā Tailwind CSS būvēšanas procesā, jo rīki nevar "redzēt", ka šīs klases būs nepieciešamas.

Piemēram, apsveriet scenāriju, kurā jūs dinamiski piemērojat fona krāsas, pamatojoties uz lietotāja preferencēm. Jums varētu būt krāsu opciju kopa (piemēram, `bg-red-500`, `bg-green-500`, `bg-blue-500`) un izmantot JavaScript, lai piemērotu atbilstošo klasi, pamatojoties uz lietotāja izvēli. Šajā gadījumā Tailwind CSS var neiekļaut šīs klases gala CSS failā, ja vien jūs tās skaidri neiekļaujat drošajā sarakstā.

Vēl viens izplatīts piemērs ietver dinamiski ģenerētu saturu ar saistītiem stiliem. Iedomājieties, ka veidojat informācijas paneli, kas attēlo dažādus logrīkus, katram ar unikālu stilu, ko nosaka tā tips vai datu avots. Konkrētās Tailwind CSS klases, kas tiek piemērotas katram logrīkam, var būt atkarīgas no attēlotajiem datiem, kas apgrūtina to iepriekšēju iekļaušanu drošajā sarakstā. Tas attiecas arī uz komponentu bibliotēkām, kur jūs vēlaties, lai gala lietotājs varētu izmantot dažas CSS klases.

Metodes dinamisku klašu nosaukumu iekļaušanai drošajā sarakstā

Ir vairākas stratēģijas, kā iekļaut dinamiskus klašu nosaukumus drošajā sarakstā Tailwind CSS. Labākā pieeja ir atkarīga no jūsu projekta sarežģītības un dinamisma pakāpes.

1. Izmantojot `safelist` opciju `tailwind.config.js` failā

Visvienkāršākā metode ir izmantot `safelist` opciju jūsu `tailwind.config.js` failā. Šī opcija ļauj skaidri norādīt klašu nosaukumus, kuriem vienmēr jābūt iekļautiem gala CSS failā.

/** @type {import('tailwindcss').Config} */
module.exports = {
  content: [
    "./src/**/*.{js,jsx,ts,tsx}",
  ],
  safelist: [
    'bg-red-500',
    'bg-green-500',
    'bg-blue-500',
    'text-xl',
    'font-bold',
  ],
  theme: {
    extend: {},
  },
  plugins: [],
}

Plusi:

Mīnusi:

2. Izmantojot regulārās izteiksmes `safelist` opcijā

Sarežģītākiem scenārijiem varat izmantot regulārās izteiksmes `safelist` opcijā. Tas ļauj jums saskaņot klašu nosaukumu modeļus, nevis skaidri uzskaitīt katru no tiem.

/** @type {import('tailwindcss').Config} */
module.exports = {
  content: [
    "./src/**/*.{js,jsx,ts,tsx}",
  ],
  safelist: [
    /^bg-.*-500$/,
    /^text-./, // piemērs, lai atbilstu visām teksta klasēm
  ],
  theme: {
    extend: {},
  },
  plugins: [],
}

Šajā piemērā regulārā izteiksme `/^bg-.*-500$/` atbildīs jebkuram klases nosaukumam, kas sākas ar `bg-`, kam seko jebkuras rakstzīmes (`.*`), kam seko `-500`. Tas iekļaus tādas klases kā `bg-red-500`, `bg-green-500`, `bg-blue-500` un pat `bg-mycustomcolor-500`.

Plusi:

Mīnusi:

3. Dinamiska drošā saraksta ģenerēšana būvēšanas laikā

Ļoti dinamiskiem scenārijiem, kur klašu nosaukumi ir patiesi neparedzami, varat ģenerēt dinamisku drošo sarakstu būvēšanas procesa laikā. Tas ietver jūsu koda analizēšanu, lai identificētu dinamiskos klašu nosaukumus, un pēc tam to pievienošanu `safelist` opcijai pirms Tailwind CSS palaišanas.

Šī pieeja parasti ietver būvēšanas skripta (piemēram, Node.js skripta) izmantošanu, lai:

  1. Parsētu jūsu JavaScript, TypeScript vai citus koda failus.
  2. Identificētu potenciālos dinamiskos klašu nosaukumus (piemēram, meklējot virkņu interpolāciju vai nosacījumu loģiku, kas ģenerē klašu nosaukumus).
  3. Ģenerētu `safelist` masīvu, kas satur identificētos klašu nosaukumus.
  4. Atjauninātu jūsu `tailwind.config.js` failu ar ģenerēto `safelist` masīvu.
  5. Palaistu Tailwind CSS būvēšanas procesu.

Šī ir vissarežģītākā pieeja, bet tā piedāvā vislielāko elastību un precizitāti ļoti dinamisku klašu nosaukumu apstrādē. Šim nolūkam varat izmantot tādus rīkus kā `esprima` vai `acorn` (JavaScript parseri), lai analizētu savu kodu bāzi. Šai pieejai ir ļoti svarīgi nodrošināt labu testu pārklājumu.

Šeit ir vienkāršots piemērs, kā to varētu ieviest:

// build-safelist.js
const fs = require('fs');
const glob = require('glob');

// Funkcija, lai no virknes izgūtu potenciālās Tailwind klases (ļoti vienkāršs piemērs)
function extractClasses(content) {
  const classRegex = /(?:class(?:Name)?=["'])([^"']*)(?:["'])/g;  // Uzlabots regex
  let match;
  const classes = new Set();
  while ((match = classRegex.exec(content)) !== null) {
    const classList = match[1].split(/\s+/);
    classList.forEach(cls => {
      // Precizējiet šo, lai pārbaudītu, vai klase *izskatās* pēc Tailwind klases
      if (cls.startsWith('bg-') || cls.startsWith('text-') || cls.startsWith('font-')) {  // Vienkāršota Tailwind klases pārbaude
        classes.add(cls);
      }
    });
  }
  return Array.from(classes);
}


const files = glob.sync('./src/**/*.{js,jsx,ts,tsx}'); // Pielāgojiet glob modeli, lai tas atbilstu jūsu failiem

let allClasses = [];
files.forEach(file => {
  const content = fs.readFileSync(file, 'utf-8');
  const extractedClasses = extractClasses(content);
   allClasses = allClasses.concat(extractedClasses);
});

const uniqueClasses = [...new Set( allClasses)];

// Nolasīt Tailwind konfigurāciju
const tailwindConfigPath = './tailwind.config.js';
const tailwindConfig = require(tailwindConfigPath);

// Atjaunināt drošo sarakstu
tailwindConfig.safelist = tailwindConfig.safelist || []; // Pārliecināties, ka drošais saraksts pastāv
tailwindConfig.safelist = tailwindConfig.safelist.concat(uniqueClasses);

// Ierakstīt atjaunināto konfigurāciju atpakaļ failā
fs.writeFileSync(tailwindConfigPath, `module.exports = ${JSON.stringify(tailwindConfig, null, 2)}`);

console.log('Tailwind config drošais saraksts veiksmīgi atjaunināts!');

Un modificējiet savu `package.json`, lai to palaistu pirms būvēšanas soļa:

{"scripts": {
  "build": "node build-safelist.js && next build",  // Vai jūsu būvēšanas komanda
  ...
}}

Svarīgi apsvērumi koda parsēšanai:

Plusi:

Mīnusi:

4. Iekļauto stilu izmantošana kā pēdējais līdzeklis (parasti nav ieteicams)

Ja jums ir ārkārtīgi dinamiski stili, kurus nevar viegli iekļaut drošajā sarakstā, izmantojot kādu no iepriekš minētajām metodēm, jūs varētu apsvērt iekļauto stilu (inline styles) izmantošanu kā pēdējo līdzekli. Tomēr šī pieeja parasti nav ieteicama, jo tā ir pretrunā ar tāda CSS ietvara kā Tailwind CSS izmantošanas mērķi.

Iekļautie stili tiek piemēroti tieši HTML elementiem, nevis definēti CSS failā. Tas var radīt vairākas problēmas:

Ja jums tomēr ir jāizmanto iekļautie stili, mēģiniet ierobežot to lietošanu tikai visdinamiskākajiem un neparedzamākajiem stiliem. Apsveriet iespēju izmantot JavaScript bibliotēkas, kas var palīdzēt efektīvāk pārvaldīt iekļautos stilus, piemēram, React `style` rekvizītu vai Vue.js `:style` saistījumu.

Piemērs (React):

function MyComponent({ backgroundColor }) {
  return (
    
{/* ... */}
); }

Labākās prakses Tailwind CSS drošā saraksta veidošanai

Lai nodrošinātu, ka jūsu Tailwind CSS drošā saraksta veidošanas stratēģija ir efektīva un uzturama, ievērojiet šīs labākās prakses:

Piemēru scenāriji ar starptautiskām sekām

Drošā saraksta veidošana kļūst vēl svarīgāka, apsverot lietojumprogrammas ar internacionalizācijas (i18n) un lokalizācijas (l10n) funkcijām.

No labās puses uz kreiso (RTL) rakstāmās valodas

Tādām valodām kā arābu, ebreju un persiešu teksts plūst no labās puses uz kreiso. Tailwind CSS nodrošina utilītas RTL izkārtojumu apstrādei, piemēram, `rtl:text-right` un `ltr:text-left`. Tomēr šīs utilītas tiek iekļautas gala CSS failā tikai tad, ja tās ir skaidri iekļautas drošajā sarakstā vai ja tās tiek atklātas jūsu pirmkodā.

Ja jūsu lietojumprogramma atbalsta RTL valodas, pārliecinieties, ka esat iekļāvis attiecīgās RTL utilītas drošajā sarakstā, lai nodrošinātu, ka jūsu izkārtojumi tiek pareizi parādīti RTL vidēs. Piemēram, varat izmantot regulāro izteiksmi, piemēram, `/^(rtl:|ltr:)/`, lai drošajā sarakstā iekļautu visas RTL un LTR utilītas.

Dažādas fontu saimes

Dažādām valodām ir nepieciešamas dažādas fontu saimes, lai pareizi attēlotu rakstzīmes. Piemēram, ķīniešu, japāņu un korejiešu valodām ir nepieciešami fonti, kas atbalsta CJK rakstzīmes. Līdzīgi valodām ar akcentētām rakstzīmēm var būt nepieciešami fonti, kas ietver šīs rakstzīmes.

Ja jūsu lietojumprogramma atbalsta vairākas valodas, jums var būt nepieciešams izmantot dažādas fontu saimes dažādām valodām. Varat izmantot `@font-face` noteikumu CSS, lai definētu pielāgotas fontu saimes, un pēc tam izmantot Tailwind CSS, lai tās piemērotu konkrētiem elementiem. Pārliecinieties, ka esat iekļāvis drošajā sarakstā fontu saimju nosaukumus, kurus izmantojat savā CSS, lai nodrošinātu to iekļaušanu gala CSS failā.

Piemērs:

/* Jūsu globālajā CSS failā */
@font-face {
  font-family: 'Noto Sans SC';
  src: url('/fonts/NotoSansSC-Regular.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
}

@font-face {
  font-family: 'Noto Sans SC';
  src: url('/fonts/NotoSansSC-Bold.woff2') format('woff2');
  font-weight: 700;
  font-style: normal;
}

/* Jūsu tailwind.config.js failā */
module.exports = {
  // ...
  theme: {
    extend: {
      fontFamily: {
        'sans': ['Noto Sans SC', ...],
      },
    },
  },
  safelist: [
    'font-sans', // nodrošina, ka font-sans vienmēr tiek iekļauts
  ],
};

Kultūras atšķirības stilizācijā

Dažos gadījumos stilizācijas preferences var atšķirties dažādās kultūrās. Piemēram, krāsu asociācijas var ievērojami atšķirties no vienas kultūras uz otru. Līdzīgi, tukšās vietas un tipogrāfijas izmantošanu var ietekmēt arī kultūras normas.

Ja jūsu lietojumprogramma ir paredzēta globālai auditorijai, ņemiet vērā šīs kultūras atšķirības un attiecīgi pielāgojiet savu stilu. Tas var ietvert dažādu CSS klašu izmantošanu dažādām lokalizācijām vai ļaujot lietotājiem pielāgot savas stilizācijas preferences.

Noslēgums

Tailwind CSS drošā saraksta veidošana ir kritiska optimizācijas tehnika produkcijas vidēm. Skaidri norādot klašu nosaukumus, kuriem jābūt iekļautiem gala CSS failā, jūs varat ievērojami samazināt tā izmēru, nodrošinot ātrāku lapas ielādes laiku un uzlabotu veiktspēju. Lai gan dinamiski klašu nosaukumi rada izaicinājumu, ir vairākas stratēģijas to iekļaušanai drošajā sarakstā, sākot no vienkāršiem skaidriem sarakstiem līdz sarežģītākai dinamiskā saraksta ģenerēšanai. Ievērojot šajā rokasgrāmatā izklāstītās labākās prakses, jūs varat nodrošināt, ka jūsu Tailwind CSS drošā saraksta veidošanas stratēģija ir efektīva, uzturama un pielāgojama jūsu projekta unikālajām vajadzībām.

Atcerieties savos tīmekļa izstrādes projektos par prioritāti izvirzīt lietotāju pieredzi un veiktspēju. Drošā saraksta veidošana ar Tailwind CSS ir spēcīgs rīks šo mērķu sasniegšanai.